#include "../../src/conexion.h"

static int recibir_conexion=0;
//0 es que nada paso
//1 es que se inicio la conexion del cliente
//2 es que se establecio la conexion del cliente
//3 es que se acepto la conexion en el server
//4 es que se pidio terminar la conexion


#define CLIENTE 222
#define SERVER 111
conexion *cliente;
conexion *servidor;

int conexion_conectar(conexion *c, char *servidor){
  recibir_conexion=1;
  c->socket=CLIENTE;//EL CLIENTE
  cliente=c;
  conexion_set_status(c, CON_CONECTANDO); 
}

int conexion_escuchar(conexion *c, int puerto){
  //lalala
  conexion_set_status(c, CON_ABIERTO); 
}

int conexion_aceptar(conexion *accept, conexion **nuevo_cliente, conexion_callback callback){
  if(recibir_conexion==2){
  conexion_crear(nuevo_cliente, callback);
  (*nuevo_cliente)->socket=SERVER;
  conexion_publish(*nuevo_cliente, CON_NUEVA_CONEXION, 0, 0); 
  conexion_set_status(*nuevo_cliente, CON_CONECTADO); 
  servidor = *nuevo_cliente;
  recibir_conexion=3;
  }
  else{
    *nuevo_cliente=0;
  }
}

int conexion_desconectar(conexion *c){
  conexion_set_status(c, CON_DESCONECTANDO); 
  recibir_conexion=4;
  conexion_set_status(c, CON_DESCONECTADO); 
}


int conexion_procesar_envios(conexion *origen){
  conexion *destino;
  if(origen==cliente){
    destino=servidor;
  }else{
    destino=cliente;
  }
  while(cola_hay_datos(origen->mensajes_salientes)){
      void *datos;
      int size;
      cola_ver_primero(origen->mensajes_salientes, &datos, &size);
      cola_encolar(&(destino->mensajes_entrantes), datos, size);
      cola_desencolar(&(origen->mensajes_salientes));
  }
}

int conexion_procesar_recepciones(conexion *c){
  //nada por que lo hizo envios
}

int conexion_procesar_conexion(conexion *c){
  if(recibir_conexion==1){
    recibir_conexion=2;
    conexion_set_status(c, CON_CONECTADO); 
  }
}


